import moment from "moment";
/**
 * 通过hook形式提供公共方法
 * author: xugq
 * date: 2022-07-27
 */
const useCommon = () => {

  const common = {
    /* 正则类 */
    // 正整数
    isInteger: (val: string) => /^[0-9]*$/.test(val),
    // 身份证号
    isIdCardNo: (val: string) => /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(val),
    // 手机号
    isPhone: (val: string) => /^((13|14|15|16|17|18|19)[0-9]{1}\d{8})$/.test(val),
    // 经度
    // eslint-disable-next-line no-useless-escape
    isLongitude: (val: string) => /^[\-\+]?(0(\.\d{1,10})?|([1-9](\d)?)(\.\d{1,10})?|1[0-7]\d{1}(\.\d{1,10})?|180\.0{1,10})$/.test(val),
    // 纬度
    // eslint-disable-next-line no-useless-escape
    isLatitude: (val: string) => /^[\-\+]?((0|([1-8]\d?))(\.\d{1,10})?|90(\.0{1,10})?)$/.test(val),
    // 金额（小数点后2位）
    isAmount: (val: string) =>  /^\d+(.\d{1,2})?$/.test(val),
    // 邮件
    isEmail: (val: string) =>  /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/.test(val),

    /* 实用方法类 */
    // 数组对象去重(arr:数组 key:去重键名)
    arrayToRepeat: (arr: Array<any>, key: string) => {
      const obj: any = {};
      // eslint-disable-next-line @typescript-eslint/naming-convention
      let deal_arr = [];
      deal_arr = arr.reduce((item, next) => {
        // eslint-disable-next-line @typescript-eslint/no-unused-expressions
        obj[next[key]] ? '' : (obj[next[key]] = true && item.push(next));
        return item;
      }, []);
      return deal_arr;
    },
    // 时间格式化
    dateFormat: (date: any, format: string = 'yyyy-MM-DD') => {
      if (!date) return '';
      return moment(date).format(format);
    },
    // 时间比较(f_date 第一个时间,s_date 第二个时间 此时间不传默认与当前时间比较)
    dateCompare: (f_date: any = null, s_date: any = null) => {
      if (!f_date) return true;
      if (!s_date) return moment(f_date) > moment();
      return moment(f_date) > moment(s_date);
    },
    // 获取文件类型
    getFileMimeType: (fileType: string) => {
      let ft = fileType.substring(fileType.lastIndexOf('.') + 1, fileType.length).toLowerCase();
      if (ft.includes('?')) ft = ft.substring(0, ft.lastIndexOf('?'));
      return ft;
    },
    // 获取文件扩展名之前的文本
    getFileText: (val: string = '') => {
      if (val.lastIndexOf('.') === -1) return val;
      return val.substring(0, val.lastIndexOf('.'))
    },
    // 对时间范围分割成对应的字段
    dealDateRange: (dateRange: any[] = [], startKey: string, endKey: string, format: string = "yyyy-MM-DD") => {
      if (!dateRange) return {};
      if (dateRange.length < 2) return {};
      return {
        [startKey]: common.dateFormat(dateRange[0], format),
        [endKey]: common.dateFormat(dateRange[1], format),
      }
    },
    // 数组从最后查索引
    findLastIndex: (array: any[], fn: any) => {
      if (!Array.isArray(array)) {
        return -1
      }
      if (array.length === 0) {
        return -1
      }
      // eslint-disable-next-line no-plusplus
      for ( let i = array.length - 1; i >= 0; i-- ) {
        const item = array[i];
        if (fn.call(null, item, i, array)) {
          return i
        }
      }
      return -1
    },
  }

  return { ...common };
};

export default useCommon;
